iT邦幫忙

1

Ruby基本介紹(七) && missing-number

  • 分享至 

  • xImage
  •  

本篇音樂分享

Yes


本篇文章會提到的

  1. 上一篇衍生題:include,與extend差異?
  2. missing-number

include與extend差異?

模組是將重複的功能(編碼)整理出來,當還有其他類別也需要時,"掛"上去,可以用include或extend。
include:將模組中的方法成為實體方法時使用。
extend:將模組中的方法成為類別方法時使用。

2.7.3 :020 > module One_module
2.7.3 :021 >   def i_have_a_method
2.7.3 :022 >     puts '我是模組喔'
2.7.3 :023 >   end
2.7.3 :024 > end
 => :i_have_a_method 

2.7.3 :029 > class One_class
2.7.3 :030 >   include One_module
2.7.3 :031 > end
 => One_class 

2.7.3 :032 > class Two_class
2.7.3 :033 >   extend One_module
2.7.3 :034 > end
 => Two_class 
 
2.7.3 :035 > One_class.i_have_a_method
NoMethodError (undefined method `i_have_a_method' for One_class:Class)
2.7.3 :036 > Two_class.i_have_a_method
我是模組喔

用extend掛模組時,模組內的方法成為類別方法。也表先出include掛載,類別不能使用。

2.7.3 :037 > one = One_class.new
 => #<One_class:0x00007fb5c531bc58> 
2.7.3 :038 > one.i_have_a_method
我是模組喔
 => nil 

須先實體化,include掛的模組中的方法才能使用。

補充:

2.7.3 :009 > new_arr = Array.new
 => [] 
2.7.3 :010 > new_arr2 = new_arr.new
NoMethodError (undefined method `new' for []:Array)

new給Array類別用.類別方法。

2.7.3 :011 > new_arr << 1
 => [1] 
2.7.3 :012 > new_arr << 2
 => [1, 2] 
2.7.3 :013 > new_arr << "三"
 => [1, 2, "三"] 
2.7.3 :014 > Array << new_arr
NoMethodError (undefined method `<<' for Array:Class)

<< 這個方法是實體在用.所以是實體方法。


Rails前,你可能需要知道,但是初學時很難搞清楚的事。

方法, 模組, 套件, 函式庫, 框架 。

一個方法比較趨向實現一個邏輯。

一個模組集合一或多個方法,來達到一或多個功能。

套件與函式庫是一或多個模組組合成一個資料夾或特定格式的檔案,引入後(import, require)可使用。
Ruby中有許多函式庫,依造Gem格式來發佈,gem也可以視為套件。
(但有許多資料會把函式庫與套件分開說明。)

框架不是只是函式庫,框架很像是軟體設計圖,可以提供軟體基礎的功能,強大的框架可以給予軟體較完善的功能。

但請記得,我們要學框架怎麼用,而不是學怎麼製作框架。


Missing-number

題目連結:https://leetcode.com/problems/missing-number/
題目整理:給一個陣列,陣列中有n個數字且在0..n的範圍中,請找出缺失的數字。
例如[0, 2]這個陣列,有2個值,那就是找0..2與[0, 2]中缺的數字。
進階項目請無視
整理

def missing_number(nums)

end

puts missing_number([3,0,1]) #=>2
puts missing_number([0,1]) #=>2
puts missing_number([9,6,4,2,3,5,7,0,1]) #=>8
puts missing_number([0]) #=>1
def missing_number(nums)
  #n等於陣列長度
  n = nums.length
  #一個包含n個數字,且由0開始的陣列
  new_nums = (0..n).to_a
  #找兩個陣列中不一樣的地方,這邊如果是沒有array特殊語法的語言可能就要用查表或是迴圈處理。
  new_nums - nums
end

簡化

def missing_number(nums)
  (0..nums.size).to_a - nums
end

我在一開始遇到的問題是,兩個陣列相減
array1 - array2
應該要想成,第一個陣列與第二陣列相比,哪裡不一樣。

2.7.3 :001 > [1 ,3 ,5] - [2, 6, 7]
 => [1, 3, 5] 
2.7.3 :002 > [1 ,3 ,5] - [1, 3]
 => [5] 
2.7.3 :003 > [1 ,3 ,5] - [1, 3, 5, 7]
 => [] 

如果我沒偷懶,下一篇應該要講Rails了,但是我還沒想好怎麼介紹.....


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言